2009-04-26 16:28:00
翠竹心情 的破解挺好用的,只是命令行程序 ISCmdBld.exe 没有破解,这样就不能批处理打包了。
趁周末稍微研究了下,但是最后结论还没得出来,先简要记一笔,以后再补充。
ISCmdBld.exe
100419860 /$ 6A FF push -1 ; main 入口
2
3004198EB |. E8 D079FEFF call 004012C0
4
5
6
700401376 . E8 A54E0100 call 00416220 ; 疑似加载 ISWiBuild.dll
8
9004013C3 . E8 981B0000 call 00402F60 ; 这句执行后便会输出 build start at 字样
10
11004013E9 . FF92 88000000 call dword ptr [edx+88] ; IsWiBuil.6ADE75D0
12
13
14
156ADE7637 E8 845C0000 call 6ADED2C0 ;
16
17
18
196ADED366 8D4C24 10 lea ecx, dword ptr [esp+10] ; esp+10 处等下会存有输出参数
206ADED36A 66:C74424 10 00>mov word ptr [esp+10], 0
216ADED371 8B06 mov eax, dword ptr [esi]
226ADED373 8B90 DC000000 mov edx, dword ptr [eax+DC]
236ADED379 51 push ecx
246ADED37A 56 push esi
256ADED37B FFD2 call edx ; 这里会进行一番验证
266ADED37D 894424 14 mov dword ptr [esp+14], eax
276ADED381 8D4424 14 lea eax, dword ptr [esp+14]
286ADED385 50 push eax
296ADED386 E8 15DFFDFF call 6ADCB2A0
306ADED38B 66:837C24 10 00 cmp word ptr [esp+10], 0 ; 这里检查刚才的验证结果
316ADED391 75 48 jnz short 6ADED3DB ; 关键跳转
326ADED393 8DB424 84010000 lea esi, dword ptr [esp+184] ; 这里下去就会抛异常了
刚才的
16ADED37B FFD2 call edx ; 这里会进行一番验证
在实际运行中会跳到 ISAppServices.67F109F0:
167F109F0 8B4424 04 mov eax, dword ptr [esp+4]
2
3...
4
567F10A22 68 187F1968 push 68197F18 ; ASCII "IsProductLicenseValid"
667F10A27 50 push eax
767F10A28 FF15 B4711868 call dword ptr [<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
867F10A2E 85C0 test eax, eax
967F10A30 74 1E je short 67F10A50
1067F10A32 FFD0 call eax
之后便找 ISUIServices.IsProducetLicenseValid
翠竹心情破解的主要文件就是 ISUIServices.dll
后来发现一点,把 ISUIServices.dll 换成原版,命令行编译能顺利进行,换成破解版的,就提示许可证过期啥啥。
一个暂时的解决办法是,把上面
16ADED391 75 48 jnz short 6ADED3DB ; 关键跳转
改成
16ADED391 EB 48 jmp short 6ADED3DB ; 关键跳转
就可以用了
文件中地址是 0002D390 (75 -> EB)
但是,后来的编译过程中,发现它又有几次调用了 ISUIServices.IsProducetLicenseValid,所以这个办法可不可靠还是未知数。
暂记,以后有空验证。
首发:https://blog.csdn.net/cnStreamlet/article/details/4125834